package servlets;

import beans.EncuestaBean;
import beans.HistoricoBean;
import beans.OpcionesEncuestaBean;
import databeans.EncuestaDataBean;
import databeans.HistoricoDataBean;
import databeans.OpcionesEncuestaDataBean;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.ServletConfig;
import org.apache.commons.lang.StringUtils;
import utils.CargarConfiguraciones;
import utils.respuestaServlet;

/**
 *
 * @author 3M3R50N
 */
public class AgregarEncuesta extends HttpServlet {
   
    private Connection conexion;
    private Statement instruccion;

    //Establecer la conexion con la base de datos
    @Override
    public void init (ServletConfig config) throws ServletException{

    //Intentar la conexion y crear instrucciones
        try{
        CargarConfiguraciones cc = new CargarConfiguraciones();
        Class.forName(cc.getValor("driver"));
        conexion =  DriverManager.getConnection(cc.getValor("urlbase"),
                    cc.getValor("usuario"),
                    cc.getValor("clave"));
        //Crear la instruccion
        instruccion = conexion.createStatement();
        }catch(Exception e){
            e.printStackTrace();
        }//end catch


    }

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void process(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            //activa
            char act = request.getParameter("activa").charAt(0);
            //fecha actual
            SimpleDateFormat formatofecha= new SimpleDateFormat("yyyy-MM-dd");
            String fecha = formatofecha.format(new Date());
            java.sql.Date fechaactual      = java.sql.Date.valueOf(fecha);
            java.sql.Date fechavencimiento = java.sql.Date.valueOf(request.getParameter("fechavencimiento"));
            //armar encuesta
            EncuestaBean encuesta= new EncuestaBean();
            HistoricoBean historico = new HistoricoBean();
            encuesta.setIdEncuesta(StringUtils.leftPad(request.getParameter("codigo"), 6, '0'));
            encuesta.setActiva(act);
            encuesta.setDescripcionEncuesta(request.getParameter("descripcion"));
            encuesta.setFechaEncuesta(fechaactual);
            encuesta.setFechaVencimiento(fechavencimiento);
            encuesta.setMaxRespuestas(Integer.parseInt(request.getParameter("maxrespuestas")));
            if(!request.getParameter("materia").equalsIgnoreCase("todo"))
                encuesta.setMateria(request.getParameter("materia"));

            historico.setEncuesta(StringUtils.leftPad(request.getParameter("codigo"), 6, '0'));
            historico.setUsuario(request.getParameter("usuario"));
            Calendar cal = Calendar.getInstance();
            CargarConfiguraciones cc = new CargarConfiguraciones();
            historico.setCiclo(cc.getValor("ciclo") + " - " + cal.get(Calendar.YEAR));



            ArrayList <OpcionesEncuestaBean> listaopciones = new ArrayList<OpcionesEncuestaBean>();
            for (int i = 1; i < 10; i++) {
                String nomparametro="textopc"+i;
                if (request.getParameter(nomparametro)!=null)
                {
                    OpcionesEncuestaBean elemento = new OpcionesEncuestaBean();
                    elemento.setCorrelativo(String.valueOf(i));
                    elemento.setIdEncuesta(encuesta.getIdEncuesta());
                    elemento.setDescripcionOpcion(request.getParameter(nomparametro));
                    listaopciones.add(elemento);
                }

            }
            try {
                EncuestaDataBean encuestas = new EncuestaDataBean();
                OpcionesEncuestaDataBean opciones = new OpcionesEncuestaDataBean();
                HistoricoDataBean historicos = new HistoricoDataBean();
                encuestas.setEncuesta(encuesta);
                opciones.setOpcionesEncuesta(listaopciones);
                historicos.setHistorico(historico);
                
                respuestaServlet.imprimirEncabezado(out, "Agregar Encuesta");
                out.println("<p>Encuesta agregada exitosamente</p>");
                respuestaServlet.imprimirPie(out);
           
            } catch (Exception ex) {
                Logger.getLogger(AgregarEncuesta.class.getName()).log(Level.SEVERE, null, ex);
                respuestaServlet.imprimirEncabezado(out, "Agregar Encuesta");
                out.println("La encuesta no pudo ser guardada");
                respuestaServlet.imprimirPie(out);
            }
        } finally { 
            out.close();
        }
    } 

    @Override
    public void destroy()
    {

        try{
            instruccion.close();
            conexion.close();

        }
        catch(SQLException exc)
        {
            exc.printStackTrace();
        }

    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        process(request, response);
    } 

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        process(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
